package com.java.tree;

/**
 * 顺序二叉树的测试
 * @author 19252
 * @date 2020/7/24
 */
public class ArrayBinaryTreeDemo {
    public static void main(String[] args) {
        ArrayBinaryTree arrayBinaryTree = new ArrayBinaryTree();
        arrayBinaryTree.setArray(new int[]{1, 2, 3, 4, 5, 6, 7});
        arrayBinaryTree.preOrder();
        System.out.println();
        arrayBinaryTree.infixOrder();
    }
}

/**
 * 顺序二叉树
 */
class ArrayBinaryTree {

    private int[] array;

    public int[] getArray() {
        return array;
    }

    public void setArray(int[] array) {
        this.array = array;
    }

    /**
     * 前序排列的内部调用
     */
    public void preOrder(){
        this.preOrder(0);
    }

    /**
     * 中序排列的内部调用
     */
    public void infixOrder(){
        this.infixOrder(0);
    }

    /**
     * 顺序二叉树的前序排列
     */
    public void preOrder(int index){
        // 首先对数组进行空判断
        if (array == null || array.length == 0){
            System.out.println("数组未初始化！不能进行遍历");
            return;
        }
        System.out.print(array[index] + " ");
        // 向左递归
        if (index * 2 + 1 < array.length){
            preOrder(index * 2 + 1);
        }
        // 向右递归
        if (index * 2 + 2 < array.length){
            preOrder(index * 2 + 2);
        }
    }

    /**
     * 顺序二叉树的中序排列
     */
    public void infixOrder(int index){
        // 首先对数组进行空判断
        if (array == null || array.length == 0){
            System.out.println("数组未初始化！不能进行遍历");
            return;
        }
        // 向左递归
        if (index * 2 + 1 < array.length){
            infixOrder(index * 2 + 1);
        }
        System.out.print(array[index] + " ");
        // 向右递归
        if (index * 2 + 2 < array.length){
            infixOrder(index * 2 + 2);
        }
    }
}